[書評] 「AWSコンテナ設計・構築[本格]入門」は文字通り本格的にECS/Fargateを始めるのにお勧めの一冊
みなさん、こんにちは!
福岡オフィスの青柳です。
今回は、AWSに関して書かれた書籍の「書評」をお届けしたいと思います。
- タイトル: AWSコンテナ設計・構築[本格]入門
- 出版社: SBクリエイティブ
- 著者(敬称略): 佐々木 拓郎(監修)、新井雅也(著者)、馬勝淳史(著者)
- 出版社の書籍情報URL: https://www.sbcr.jp/product/4815607654/
本の構成 (目次)
全5章の構成になっており、前半の1~3章で理論を学んだ後、後半の4~5章ではハンズオン形式で実際にAWS環境を構築する流れとなっています。
- Chapter 01: コンテナの概要
- 1-1: コンテナという技術
- 1-2: Dockerとは
- 1-3: オーケストレータとは
- 1-4: コンテナ技術を導入するために考慮すべきこと
- Chapter 02: コンテナ設計に必要なAWSの基礎知識
- 2-1: AWSが提供するコンテナサービス
- 2-2: アーキテクチャの構成例
- 2-3: 各アーキテクチャに適応したユースケース
- 2-4: AWSでコンテナを利用する優位性
- Chapter 03: コンテナを利用したAWSアーキテクチャ
- 3-1: 本章を読み進める前に
- 3-2: Well-Architectedフレームワークの活用
- 3-3: 設計対象とするアーキテクチャ
- 3-4: 運用設計
- 3-5: セキュリティ設計
- 3-6: 信頼性設計
- 3-7: パフォーマンス設計
- 3-8: コスト最適化設計
- Chapter 04: コンテナを構築する(基礎編)
- 4-1: ハンズオンで作成するAWS構成
- 4-2: ネットワークの構築
- 4-3: アプリケーションの構築
- 4-4: コンテナレジストリの構築
- 4-5: オーケストレータの構築
- 4-6: データベースの構築
- 4-7: アプリケーション間の疎通確認
- Chapter 05: コンテナを構築する(実践編)
- 5-1: ハンズオンで作成するAWS構成
- 5-2: 運用設計:Codeシリーズを使ったCI/CD
- 5-3: 運用設計&セキュリティ設計:アプリケーションイメージへの追加設定
- 5-4: パフォーマンス設計:水平スケールによる可用性向上
- 5-5: セキュリティ設計:アプリケーションへの不正アクセス防止
- 5-6: 運用設計&セキュリティ設計:ログ収集基盤の構築
- 5-7: 運用設計:FargateによるBastion(踏み台ホスト)の構築
- 5-8: セキュリティ設計:Trivy/Dockleによるセキュリティチェック
感想
これは「Amazon ECS」の入門書である
タイトルが「(AWS) コンテナ~入門」であるため、コンテナ初学者の方で購入された方もいらっしゃるのではないかと思います。
本書では第1章で「コンテナという技術」「Docker」「コンテナオーケストレータ (Kubernetes、ECS)」などコンテナに関しての概要が解説されています。
しかし、それほどページ数が割かれている訳ではなく、内容としてはアッサリとしたものになっています。
コンテナ自体の初学者は、本書を読む前、あるいは本書と併せて、コンテナやDockerの入門書を1冊読んでおくとよろしいのではないかと思います。
また、AWSにはECSの他にも「EKS (Elastic Kubernetes Service)」というサービスもある訳ですが、本書ではEKSについては (後述する「比較検討」で触れられているものの) メインの解説対象としては取り扱われておらず、ほぼ全編「ECSとFargateについての解説書」という位置付けになっています。
ちなみに、私はこの「Amazon ECSに特化した」点については、それで良かったのではないかと評価しています。
EKSについて学習する場合、AWSのサービスについての知識はもちろんですが、Kubernetesについての理解の必要性がかなりの割合を占めるのではないかと思います。
本書は (ほぼ) ECSのみの内容であるにもかかわらず400ページ超のボリュームがあります。
これに、KubernetesおよびEKSの解説を含めようとすると一体何ページになるのやら・・・
ということで、EKSについては (今のところ) Kubernetesに関する書籍を読んで勉強するのが現実的な選択肢かと思います。(そのうち「Amazon EKSに特化した解説書」も登場してくることに期待しましょう)
AWSでコンテナを導入する際の「4つのパターン」を比較検討できる
AWSでコンテナを導入する場合、大きな選択肢として「コントロールプレーン」「データプレーン」でそれぞれ2種類から選択することができます。
- コントロールプレーンの選択
- ECS
- EKS
- データプレーンの選択
- EC2
- Fargate
2019年のre:Inventにおいて「EKS on Fargate」が発表されたことにより、これらの「2種類」×「2種類」の組み合わせが全て可能となり、都合「4パターン」の構築パターンから選択できるようになりました。
すなわち、以下の4パターンです。
- ECS on EC2
- ECS on Fargate
- EKS on EC2
- EKS on Fargate
本書の第2章では、これらの4つのパターンの「メリット」と「デメリット」を、「コスト面」「拡張性」「信頼性」「エンジニアリング観点」の4つの軸で比較しています。
最後の「エンジニアリング観点」って何? と思うかもしれませんが、これは「エンジニア人材の確保のしやすさ」や「エンジニアの技術へのモチベーション」という観点が評価されています。(これは面白いと思いました)
これらのメリットとデメリットを挙げた上で、いろいろなユースケースにおいて適したパターンを選定しています。
一例を挙げると以下のようなユースケースです:
- オンプレミスやEC2上でKubernetesを動かしているケース (からの移行)
- 機械学習が必要なケース
- SIでサービスを生み出すケース
- 自社プロダクトとしてサービスを生み出すケース
比較検討も、よくありがちな「星取り表」形式ではなく、一つ一つ理由を述べながら解説されています。
そのため、自分が選定しなければならない時に、単にユースケースに当てはめるのではなく、導入しようとするシステムの特性を意識した検討が行えるのではないかと思いました。
AWSの「Well-Architectedフレームワーク」に沿ったアーキテクチャ設計を体得できる
本書の第3章では、ECSのアーキテクチャ設計の考え方やベストプラクティスについて、実に100ページ以上というボリュームを割いて解説されています。
ここで設計の重要なベースとして用いられているのが「AWS Well-Architectedフレームワーク」です。
AWS Well-Architectedフレームワークは次の5つの「柱」から構成されています。
- 運用上の優秀性
- セキュリティ
- 信頼性
- パフォーマンス効率
- コスト最適化
これらのそれぞれについて、ECSの構成や設定をどうすべきか、他のAWSサービス (あるいは外部サービス) をどのように組み合わせて利用すべきか、といった点について解説されています。
例を挙げてみます (これは第3章の内容のごく一部です):
- 運用設計 (「運用上の優秀性」の柱)
- ロギング設計
- CloudWatch LogsとFireLensの特徴および使い分け
- CI/CD設計
- AWS Codeシリーズを組み合わせたCI/CDパイプラインの様々な構成例
- 環境 (開発/ステージング/プロダクション) の違いによるCI/CD構成の実装の考慮点
- ロギング設計
- セキュリティ設計
- イメージに対するセキュリティ対策
- ECRのスキャン機能、サードパーティ製品 (Aqua Trivy、Dockle) の守備範囲と使い分け
- コンテナに対するセキュリティ対策
- 脅威や悪意に対抗するためのネットワーク設計 (VPC内部、外部)
- イメージに対するセキュリティ対策
- 信頼性設計
- 障害時切り離しと復旧
- 「Design for Failure」に従った自動切り離しと復旧のメカニズム
- 障害時切り離しと復旧
・・・などなど、「Well-Architected」に沿って、「なぜそうしなければならないのか」という理論と、「どのようにすればよいのか」という実践の両面から詳細に説明されています。
また、第4章と第5章では、第3章で解説された「AWS Well-Architectedフレームワーク」に沿った設計手法について、実際にAWS環境を構築しながら体得できるハンズオンが設けられています。
手ごたえがありつつも、きちんと完走できるハンズオン
第4章と第5章の「ハンズオン」では、以下のような工夫によって「実際に手を動かすことによる理解向上」と「時間の短縮や『つまづき』の排除」のバランスを上手く取っていると感じました。
- 初出の部分、重要な部分については、マネジメントコンソールを使って手動で構築を行う
- 繰り返しになる部分、本質ではない部分については、CloudFormationなどを使って手順を簡略化している
また、これは最近出版された新しい本であることによる利点にはなりますが、「画面やコマンドが比較的最新である」ため「本の通りにやっているはずなのに上手く行かない」という事態に陥ることがほとんど無かったです。
(もちろん、スクリーンショットの充実や、コマンドや設定ファイルの内容を著者のGitHubリポジトリからコピーできる点など、著者や出版社の方々の工夫による点も大きいです)
ハンズオンの内容については、Well-Architectedフレームワークの5本の柱の設計要素を一通り実装していて、様々なAWSサービスを構築する必要があることから、かなりボリュームが大きく、難易度もそれなりに高いのではないかと思いました。
ただ、本書のハンズオンでは前述の通り「手動での構築」と「CloudFormationなどによる構築自動化」を上手く組み合わせて、ステップ・バイ・ステップによる構築を行う進め方となっています。
巷によくある (?) 「『実践的なサンプル環境』を巨大なCloudFormationを一発流すことで自動構築する」ような「(自称) ハンズオン」とは異なり、一つ一つじっくり進めることで、たとえ手詰まりがあっても自力で何とか解決できる可能性が高いのではないかと思います。
~~~
ちなみに、本書のハンズオンは第4章と第5章を通して一つの環境を構築・機能追加する進め方となっています。
作成するリソースの数やサイズもそれなりに大きいため、作成した状態で放置するとAWS利用料金が結構かかってしまうのではないかと思います。
ですので、休日など時間をじっくり取れる日を確保してから一気にハンズオンを進めるなど、なるべくAWS利用料金がかからなくて済むような方法を取ることをオススメします。
これは「Amazon ECS」の「本格的」な「指南書」である
ここまで感想を書いてみて、改めて考えてみると、本書は「ECSの入門書」と呼ぶには「ECSの初学者」にとってのハードルが少々高いのではないか?とも思いました。
もちろん、初学者の方であっても本書を手に取ってみることは問題ないのですが、できればECSの「入門」をある程度済ませてから本書に挑むのが、本書をより理解できるのではないかと思いました。
(ECSの「入門」は、AWSなどが公開している「Getting Started」的なサンプルやハンズオンをいくつか実践すれば大丈夫ではないかと思います)
一方、業務でECSを既に利用しているような「ECSの入門者」ではない方にとって、本書は「入門書だから読まなくていいや」ということは決して無いと思います。(よほどECSに精通した方でなければ・・・)
ECSや周辺サービスを「とりあえず動作する」ように構築することはできても、本書に書かれているような「AWS Well-Architectedフレームワーク」に沿った設計・実装が全てきちんと行えていない場合も多々あるのではないかと思います。(スミマセン、私もその一人です)
そのような場合に、本書を読んで手を動かすことで「業務に役立つ実践的な知識を新たに習得できる」あるいは「ある程度は理解している知識を深堀りできる」のではないでしょうか。
そういう意味で、本書は「本格的な指南書である」と言っても過言ではないと思います。
補足:「Fargate Bastion」に関して
本書において「Fargate Bastion」と呼ばれる、踏み台サーバー (Bastion) をEC2ではなくFargateを使って実現する仕組みが登場します。
目的や方法について何となく理解できるような気はするものの、イマイチ呑み込めなかったのですが、著者の新井さんが書かれているスライドとブログを拝読することで、理解の助けになりました。
本書を読まれる皆さんも、是非、これらの記事を併せてお読みになることをオススメします。
おわりに
Kubernetesに関する書籍については、一時期の「機能の説明と構築手順の解説」の書籍が一通り出版されてから、最近では運用面などにフォーカスした書籍もいくつか目にするようになりました。
一方、Amazon ECSに関しては、そのような切り口での書籍は今まで見たことがありません *1。
(そもそもECSに特化した書籍自体もほとんど無いのではなかろうか)
本書は、(恐らく) 初の「運用やセキュリティなどにも踏み込んだAmazon ECSに関する書籍」であり、かつ、内容も大変充実していると思います。
この書評を読んで気になった方、是非手に取ってみることをオススメします!
脚注
- もし既にそのような書籍があるのであれば、私の認識不足です。申し訳ありません! ↩